/**
* Copyright 2009 Maxim Cassian Porges
* 
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 
*     http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package loom.abc
{
	import loom.abc.enum.MultinameKind;
	
	import loom.util.StringUtil;

    /**
     * Loom representation of <code>multiname_info</code> in the ABC file format.
     * 
     * @see http://www.adobe.com/devnet/actionscript/articles/avm2overview.pdf     "MultinameL" in the AVM Spec (page 24)
     */
	public class MultinameL extends BaseMultiname
	{
		private var _namespaceSet : NamespaceSet;
		
		public function MultinameL(namespaceSet : NamespaceSet, kindValue : MultinameKind = null)
		{
			kindValue = (kindValue) ? kindValue : MultinameKind.MULTINAME_L;
			super(kindValue);
			assertAppropriateMultinameKind([MultinameKind.MULTINAME_L, MultinameKind.MULTINAME_LA], kindValue);
			
			_namespaceSet = namespaceSet;
		}
		
		public function get namespaceSet() : NamespaceSet
		{
			return _namespaceSet;
		}
		
        override public function equals(multiname : BaseMultiname) : Boolean
        {
            var matches : Boolean = false;
            if (multiname is MultinameL)
            {
                if (MultinameL(multiname).namespaceSet.equals(namespaceSet))
                {
                    if (super.equals(multiname))
                    {
                        matches = true;
                    }                   
                }
            }
            
            return matches;
        }
        
        public function toString() : String
        {
            return StringUtil.substitute(
                "{0}[nsset={1}]",
                kind.description,
                namespaceSet
            );
        }
	}
}